From ef4f0e53364b51efea1d71f7770e8d52631c3cb0 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 31 Mar 2017 18:25:04 +0200 Subject: [PATCH] gtkwidget: Make gtk_widget_event() Accept pointing events in root coordinates This function will, at the last minute, ensure the event contains the right widget-relative coordinates for the widget the event is being emitted to. --- gtk/gtkwidget.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 55e1353224..a550394ca5 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -6981,6 +6981,26 @@ event_window_is_still_viewable (GdkEvent *event) } } +static void +translate_coordinates (GdkEvent *event, + GtkWidget *widget) +{ + GtkWidget *event_widget; + gdouble xd, yd; + gint x, y; + + if (!gdk_event_get_coords (event, &xd, &yd)) + return; + event_widget = gtk_get_event_widget (event); + + /* FIXME: loses precision */ + x = xd; + y = yd; + gtk_widget_translate_coordinates (event_widget, widget, + x, y, &x, &y); + gdk_event_set_coords (event, x, y); +} + static gint gtk_widget_event_internal (GtkWidget *widget, GdkEvent *event) @@ -6996,6 +7016,7 @@ gtk_widget_event_internal (GtkWidget *widget, return TRUE; g_object_ref (widget); + translate_coordinates (event_copy, widget); if (widget == gtk_get_event_widget (event)) return_val |= _gtk_widget_run_controllers (widget, event, GTK_PHASE_TARGET); -- 2.30.2